#!/bin/bash

# 设置错误时退出
set -e

# 配置变量
DIST_DIR="apps/web-antd/dist"
ZIP_FILE="admin.zip"
REMOTE_HOST="root@jd"
REMOTE_DIR="/var/www/html"
BACKUP_DIR="/var/www/backup"

echo "========================================"
echo "开始部署流程"
echo "========================================"

# 执行构建
echo "正在构建项目..."
if pnpm run build:antd; then
    echo "项目构建成功！"
else
    echo "错误: 项目构建失败！"
    exit 1
fi

# 进入目录并打包
echo "正在打包文件..."
cd ${DIST_DIR}
if zip -r ${ZIP_FILE} ./*; then
    echo "文件打包成功！"

    # 获取本地文件信息
    LOCAL_FILE_TIME=$(stat -f "%Sm" -t "%Y-%m-%d %H:%M:%S" ${ZIP_FILE})
    LOCAL_FILE_SIZE=$(stat -f%z ${ZIP_FILE})
    echo "本地部署包信息:"
    echo "  文件名: ${ZIP_FILE}"
    echo "  文件大小: ${LOCAL_FILE_SIZE} 字节"
    echo "  修改时间: ${LOCAL_FILE_TIME}"

    # 保存完整路径供后续使用
    FULL_ZIP_PATH="$(pwd)/${ZIP_FILE}"

    cd ../..
else
    echo "错误: 文件打包失败！"
    cd ../..
    exit 1
fi

# 上传文件到远程服务器临时目录
echo "正在上传文件到 ${REMOTE_HOST}:/var/www/"
if scp ${FULL_ZIP_PATH} ${REMOTE_HOST}:/var/www/; then
    echo "文件上传成功！"
else
    echo "错误: 文件上传失败！"
    exit 1
fi

# 在远程服务器上执行备份和部署操作
echo "正在远程服务器上执行备份和部署..."
ssh ${REMOTE_HOST} "
    # 创建备份目录（如果不存在）
    mkdir -p ${BACKUP_DIR}

    # 备份当前的html目录
    BACKUP_FILE=\"html_backup_\$(date +%Y%m%d_%H%M%S).zip\"
    if [ -d \"${REMOTE_DIR}\" ]; then
        echo \"正在备份当前文件到 \${BACKUP_FILE}...\"
        cd /var/www && zip -r \${BACKUP_DIR}/\${BACKUP_FILE} html
        echo \"备份完成: \${BACKUP_DIR}/\${BACKUP_FILE}\"
    else
        echo \"注意: ${REMOTE_DIR} 目录不存在，无需备份\"
    fi

    # 删除旧的html目录
    if [ -d \"${REMOTE_DIR}\" ]; then
        echo \"正在删除旧的html目录...\"
        rm -rf ${REMOTE_DIR}
    fi

    # 解压新文件到html目录
    echo \"正在解压新文件到 ${REMOTE_DIR}...\"
    cd /var/www && unzip -q ${ZIP_FILE} -d html

    # 删除临时zip文件
    echo \"正在清理临时文件...\"
    rm ${ZIP_FILE}

    echo \"部署操作完成！\"
"

# 检查远程操作是否成功
if [ $? -eq 0 ]; then
    echo "远程部署成功！"

    # 验证文件是否解压到正确的目录
    echo "正在验证文件是否解压到目标目录..."
    FILE_COUNT=$(ssh ${REMOTE_HOST} "find ${REMOTE_DIR} -type f | wc -l" 2>/dev/null)
    if [ "$FILE_COUNT" -gt 0 ]; then
        echo "验证成功！文件已解压到 ${REMOTE_DIR}"
        echo "部署文件数量: $FILE_COUNT"

        # 获取远程操作完成时间
        REMOTE_FINISH_TIME=$(date '+%Y-%m-%d %H:%M:%S')
        echo "远程操作完成于: ${REMOTE_FINISH_TIME}"
    else
        echo "警告: 目标目录 ${REMOTE_DIR} 中未找到部署文件"
    fi
else
    echo "错误: 远程部署操作失败！"
    exit 1
fi

echo "========================================"
echo "部署完成!"
echo "========================================"
